package tk.xboot.boot.service;

import tk.xboot.boot.dao.domain.pg.PgTx;
import tk.xboot.boot.dao.mapper.pg.PgTxMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;

@Service
public class PGSQLService {
    @Resource
    PgTxMapper tempMapper;

    /**
     * 此方法调用了xx，在xx上加入 @Transactional 是没有作用的
     * 只能在transfer方法上加 @Transactional ,否则事务不会生效
     *
     * @param fromUserId
     * @param targetUserId
     * @param count
     * @Transactional("[value]")中的value 值指定了在PGDataSourceConf中定义的
     * bean的名称,在其中我们指定了pgTxMgr, 若没有指定，则为方法名称：pgTransactionManager
     */

    @Transactional("pgTxMgr")
    //@Transactional(transactionManager="pgTransactionManager")
    public void transfer(Long fromUserId, Long targetUserId, int count) {
        xx(fromUserId, targetUserId, count);
    }

    /**
     * 在这个方法上我们配置了 @Transactional(transactionManager="pgTransactionManager")
     * 这个transactionManager 并不存在，但是系统并不会报错，也就是说这个配置默认会被忽略,可能和
     * (Propagation.REQUIRED)　有关
     *
     * @param fromUserId
     * @param targetUserId
     * @param count
     */
    @Transactional(transactionManager = "pgTransactionManager")
    public void xx(Long fromUserId, Long targetUserId, int count) {
        try {

            PgTx tt = tempMapper.selectByPrimaryKey(1);
            PgTx tt2 = tempMapper.selectByPrimaryKey(2);


            tt.setQuantity(tt.getQuantity() - count);
            tt2.setQuantity(tt2.getQuantity() + count);

            tempMapper.updateByPrimaryKey(tt);
            int x = 0;
            int y = 3 / x;
            tempMapper.updateByPrimaryKey(tt2);
        } catch (Exception e) {
            System.out.println(e.getMessage());
            //throw new RuntimeException();
        }
    }
}
